import org.junit.Test;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;

/**
 * Created by fjc on 2017/3/14.
 */
public class List {
    //直接创建jedis
//    Jedis jedis = new Jedis("localhost",6379);
    //创建对象池
    JedisPool jedisPool = new JedisPool(new JedisPoolConfig(),"localhost",6379);
    //获取jedis
    Jedis jedis = jedisPool.getResource();

    @Test
    public void lPush(){
        //将一个或多个值插入到列表头部（最左边）
        jedis.lpush("list1","1","2","3");
    }


    @Test
    public void rPush(){
        //用于将一个或多个值插入到列表的尾部(最右边)
        jedis.rpush("list1","1","2","3");
    }

    @Test
    public void lRange(){
        //获取列表指定范围内的元素
        System.out.println(jedis.lrange("list1",0,2));
        //-1代表最后一位
        System.out.println(jedis.lrange("list1",0,-1));
    }

    @Test
    public void blPop(){
        //移出并获取列表的第一个元素,如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止
        System.out.println(jedis.blpop(2,"list1"));
    }

    @Test
    public void brPop(){
        //移出并获取列表的最后一个元素， 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止
        System.out.println(jedis.brpop(2,"list1"));
    }

    @Test
    public void brPoplPush(){
        //从列表中弹出一个值，将弹出的元素插入到另外一个列表中并返回它
        jedis.lpush("list2","1","2","3");
        jedis.lpush("list3","4","5","6");
        jedis.brpoplpush("list2","list3",2);
        System.out.println(jedis.lrange("list2",0,-1));
        System.out.println(jedis.lrange("list3",0,-1));
    }

    @Test
    public void lIndex(){
        //通过索引获取列表中的元素
        System.out.println(jedis.lindex("list3",0));
    }

    @Test
    public void lLen(){
        // 获取列表长度
        System.out.println(jedis.llen("list3"));
    }

    @Test
    public void lPushx(){
        //将一个或多个值插入到已存在的列表头部
        jedis.lpushx("list3","8");
        System.out.println(jedis.lrange("list3",0,-1));
    }

    @Test
    public void lRem(){
        //移除列表元素
        //count > 0 : 从表头开始向表尾搜索，移除与 VALUE 相等的元素，数量为 COUNT 。
        //count < 0 : 从表尾开始向表头搜索，移除与 VALUE 相等的元素，数量为 COUNT 的绝对值。
        // count = 0 : 移除表中所有与 VALUE 相等的值。
        jedis.lrem("list3",0L,"1");
        System.out.println(jedis.lrange("list3",0,-1));
    }

    @Test
    public void lSet(){
        //通过索引设置列表元素的值
        jedis.lset("list3",0,"10");
        System.out.println(jedis.lrange("list3",0,-1));
    }

    @Test
    public void lTrim(){
        //对一个列表进行修剪(trim)，就是说，让列表只保留指定区间内的元素，不在指定区间之内的元素都将被删除
        jedis.ltrim("list3",0,2);
        System.out.println(jedis.lrange("list3",0,-1));
    }

}
